package com.zzyl.nursing.util;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import java.time.LocalTime;

public class IDCardUtils {

    /**
     * 从身份证号码中提取出生日期，并返回 LocalDateTime 类型（时间为 00:00:00）
     *
     * @param idCard 身份证号码（18位）
     * @return 出生日期对应的 LocalDateTime
     */
    public static LocalDateTime getBirthDateTimeFromIDCard(String idCard) {
        if (idCard == null || idCard.length() != 18) {
            throw new IllegalArgumentException("身份证号码必须是18位");
        }

        // 提取出生年月日部分（第7到14位）
        String birthDateStr = idCard.substring(6, 14);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");

        // 将字符串解析为 LocalDate，再转换为 LocalDateTime
        LocalDate localDate = LocalDate.parse(birthDateStr, formatter);
        return LocalDateTime.of(localDate, LocalTime.MIDNIGHT); // 时间设为 00:00:00
    }

    /**
     * 获取性别（1:男，0:女）
     *
     * @param idCard 身份证号码
     * @return 性别（1:男，0:女）
     */
    public static int getGenderFromIDCard(String idCard) {
        if (idCard == null || idCard.length() != 18) {
            throw new IllegalArgumentException("身份证号码必须是18位");
        }

        char genderDigit = idCard.charAt(16);
        return (genderDigit - '0') % 2 == 1 ? 1 : 0; // 奇数为男，偶数为女
    }

    /**
     * 获取年龄（当前时间和出生日期之间的年差）
     *
     * @param idCard 身份证号码
     * @return 年龄（整数）
     */
    public static int getAgeFromIDCard(String idCard) {
        LocalDateTime birthDateTime = getBirthDateTimeFromIDCard(idCard);
        return java.time.Period.between(birthDateTime.toLocalDate(), java.time.LocalDate.now()).getYears();
    }

    // 测试示例
    public static void main(String[] args) {
        String idCard = "110101199003072316"; // 示例身份证号

        LocalDateTime birthDateTime = getBirthDateTimeFromIDCard(idCard);
        System.out.println("出生日期（LocalDateTime）：" + birthDateTime);

        int age = getAgeFromIDCard(idCard);
        System.out.println("年龄：" + age);

        int gender = getGenderFromIDCard(idCard);
        System.out.println("性别：" + (gender == 1 ? "男" : "女"));
    }
}